package model

import (
	"goods-server/basic/config"
	"time"
)

type Goods struct {
	Id         uint64    `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	CreatedAt  time.Time `gorm:"column:created_at;type:datetime(3);default:NULL;" json:"created_at"`
	UpdatedAt  time.Time `gorm:"column:updated_at;type:datetime(3);default:NULL;" json:"updated_at"`
	DeletedAt  time.Time `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
	GoodsName  string    `gorm:"column:goods_name;type:varchar(30);comment:商品名称;default:NULL;" json:"goods_name"`      // 商品名称
	GoodsPrice float64   `gorm:"column:goods_price;type:decimal(10, 2);comment:商品价格;default:NULL;" json:"goods_price"` // 商品价格
	GoodsImg   string    `gorm:"column:goods_img;type:varchar(150);comment:商品页面;default:NULL;" json:"goods_img"`       // 商品页面
	Status     string    `gorm:"column:status;type:varchar(255);comment:1待审核，2审核中，3通过，驳回;default:NULL;" json:"status"` // 1待审核，2审核中，3通过，驳回
	Inventory  int32     `gorm:"column:inventory;type:int;comment:商品库存;default:NULL;" json:"inventory"`                // 商品库存
	Sales      int32     `gorm:"column:sales;type:int;comment:商品销量;default:NULL;" json:"sales"`
}

func (g *Goods) TableName() string {
	return "goods"
}

// 商品销量+1
func (g *Goods) GoodsSales() error {
	var s int
	return config.DB.Model(&Goods{}).Updates(s + 1).Error
}

// 商品添加
func (g *Goods) GoodsCreate() error {
	return config.DB.Create(g).Error
}

// 状态审核
func (g *Goods) GoodsUpdeate() error {
	return config.DB.Where("id=?", g.Id).Updates(g).Error
}

// list
func (g *Goods) GoodsList(page, pageSize int) ([]Goods, int, error) {
	if page <= 0 {
		page = 1
	}
	if pageSize <= 0 || pageSize >= 100 {
		pageSize = 10
	}

	var total int
	var good []Goods
	config.DB.Model(&Goods{}).Find(total)
	err := config.DB.Where("deleted_at is null").Offset((page - 1) * pageSize).Limit(pageSize).Find(g).Error
	return good, total, err
}

// 商品分类表
type Classification struct {
	Id        uint64    `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	CreatedAt time.Time `gorm:"column:created_at;type:datetime(3);default:NULL;" json:"created_at"`
	UpdatedAt time.Time `gorm:"column:updated_at;type:datetime(3);default:NULL;" json:"updated_at"`
	DeletedAt time.Time `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
	GoodsId   int32     `gorm:"column:goods_id;type:int;comment:商品id;default:NULL;" json:"goods_id"`             // 商品id
	GoodsName string    `gorm:"column:goods_name;type:varchar(20);comment:商品名称;default:NULL;" json:"goods_name"` // 商品名称
	GoodsType string    `gorm:"column:goods_type;type:varchar(20);comment:商品类型;default:NULL;" json:"goods_type"` // 商品类型
}

func (c *Classification) TableName() string {
	return "classification"
}

// 商品分类
func (c *Classification) TypeCreate() error {
	return config.DB.Create(c).Error
}

// 商品分类查询
func (c *Classification) TypeFind() error {
	return config.DB.Where("goods_name= ?", c.GoodsName).First(c).Error
}
